package com.thank.concurrency.samples.threadLocal;

public class RequestHolder {

    private final static ThreadLocal<Long> requestHolder = new ThreadLocal<>();

    /**
     * 添加数据
     * 在filter里将登录用户信息存入ThreadLocal(如果不使用ThreadLocal，我们需要将request一直后传)
     */
    public static void add(Long id) {
        // ThreadLocal 内部维护一个map，key为当前线程名，value为当前set的变量
        requestHolder.set(id);
    }

    public static Long getId() {
        return requestHolder.get();
    }

    /**
     * 移除变量信息
     * 如果不移除，那么变量不会释放掉，会造成内存泄漏
     * 一般在接口处理完以后进行处理（interceptor）
     */
    public static void remove() {
        requestHolder.remove();
    }
}
